/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DataAccessObject;

import BusinessEntity.BE_Sistema;
import BusinessLogic.BL_Sistema;
import Comun.Conexion;
import Comun.Constantes;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author richard.saldana
 */
public class DA_Sistema {
    Conexion con;
    ResultSet rs;
    CallableStatement declaracion;

    private static DA_Sistema pinstancia=null;

    public static DA_Sistema obtenerInstancia()
    {
      if (pinstancia==null)
      {
          pinstancia=new DA_Sistema();
      }
      return pinstancia;
    }
    
         public ArrayList<BE_Sistema> obtenerSistemas() throws InstantiationException, IllegalAccessException, SQLException{

        con = Conexion.ObtenerInstancia();
        ArrayList<BE_Sistema> aobjBE_sistemas = new ArrayList<BE_Sistema>();

        try {
            con.IniciarConexion();
            String strProcedure = "{call obtenerSistemas() }";
            declaracion = con.preparaLlamada(strProcedure);
            declaracion.execute();
            rs = declaracion.getResultSet();   
            
            while(rs.next()){
                BE_Sistema objBE_Sistema = new BE_Sistema();
                objBE_Sistema.setIdSistema(rs.getInt("idSistema"));
                objBE_Sistema.setStrNombre(rs.getString("nombre"));
                objBE_Sistema.setStrDescripcion(rs.getString("descripcion"));
                aobjBE_sistemas.add(objBE_Sistema);
                
            }

   
        } catch (SQLException exception) {
            System.out.println("error: " + exception.getMessage());
            exception.printStackTrace();
        } finally {
            
            con.CerrarConexion();
 
            
        }
        
        return aobjBE_sistemas;
      
}
         
       public ArrayList<BE_Sistema> obtenerSubSistemas(int intCodigoSistema) throws InstantiationException, IllegalAccessException, SQLException{

        con = Conexion.ObtenerInstancia();
        ArrayList<BE_Sistema> aobjBE_Subsistemas = new ArrayList<BE_Sistema>();

        try {
            con.IniciarConexion();
            String strProcedure = "{call obtenerSubsistemas(?) }";
            declaracion = con.preparaLlamada(strProcedure);
            declaracion.setInt(1, intCodigoSistema);
            declaracion.execute();
            rs = declaracion.getResultSet();   
            
            while(rs.next()){
                BE_Sistema objBE_Subsistema = new BE_Sistema();
                objBE_Subsistema.setIdSistema(rs.getInt("idSistema"));
                objBE_Subsistema.setStrNombre(rs.getString("nombre"));
                objBE_Subsistema.setStrDescripcion(rs.getString("descripcion"));
                BE_Sistema objBE_Sistema = new BE_Sistema();
                objBE_Sistema.setIdSistema(rs.getInt("idSistema"));
                objBE_Subsistema.setObjSubsistema(objBE_Sistema);
                
                aobjBE_Subsistemas.add(objBE_Subsistema);
                
            }

   
        } catch (SQLException exception) {
            System.out.println("error: " + exception.getMessage());
            exception.printStackTrace();
        } finally {
            
            con.CerrarConexion();
 
            
        }
        
        return aobjBE_Subsistemas;
      
}
       
    public BE_Sistema obtenerSistemaId(int intIdSistema) throws InstantiationException, IllegalAccessException, SQLException{
        con = Conexion.ObtenerInstancia();
        BE_Sistema objBE_SistemaResultado = new BE_Sistema();
        ArrayList<BE_Sistema> aobjBE_Sistemas = new ArrayList<BE_Sistema>();

        try {
            con.IniciarConexion();
            String strProcedure = "{call obtenerSistemaID(?, ?) }";
            declaracion = con.preparaLlamada(strProcedure);
            declaracion.setInt(1, intIdSistema);
            declaracion.setInt(2, Constantes.TipoSubSistema);
            declaracion.execute();
            rs = declaracion.getResultSet();   
            
            while(rs.next()){
                BE_Sistema objBE_subSistema = new BE_Sistema();
                objBE_subSistema.setIdSistema(rs.getInt("idSistema"));
                objBE_subSistema.setStrNombre(rs.getString("strNombre"));
                
                BE_Sistema objBE_Sistema = new BE_Sistema();
                objBE_Sistema.setIdSistema(rs.getInt("intIdSistema")); 
                
                objBE_Sistema.setObjSubsistema(objBE_subSistema);
                
                aobjBE_Sistemas.add(objBE_Sistema);
            }
            

            
   
        } catch (SQLException exception) {
            System.out.println("error: " + exception.getMessage());
            exception.printStackTrace();
        } finally {
            
            con.CerrarConexion();
 
            
        }
        if(aobjBE_Sistemas != null){
            objBE_SistemaResultado = aobjBE_Sistemas.get(0);
            BE_Sistema objBE_Sistema= new BE_Sistema();
            objBE_Sistema = BL_Sistema.obtenerInstancia().obtenerSistema(objBE_SistemaResultado.getIdSistema());
            objBE_SistemaResultado.setStrNombre(objBE_Sistema.getStrNombre());
        }
        return objBE_SistemaResultado;
      
}
  
        public BE_Sistema obtenerSistema(int intIdSistema) throws InstantiationException, IllegalAccessException, SQLException{
        con = Conexion.ObtenerInstancia();
        BE_Sistema objBE_SistemaResultado = new BE_Sistema();
        ArrayList<BE_Sistema> aobjBE_Sistemas = new ArrayList<BE_Sistema>();

        try {
            con.IniciarConexion();
            String strProcedure = "{call obtenerSistemaID(?,?) }";
            declaracion = con.preparaLlamada(strProcedure);
            declaracion.setInt(1, intIdSistema);
            declaracion.setInt(2, Constantes.TipoSistema);
            declaracion.execute();
            rs = declaracion.getResultSet();   
            
            while(rs.next()){
                BE_Sistema objBE_Sistema = new BE_Sistema();
                objBE_Sistema.setIdSistema(rs.getInt("idSistema"));
                objBE_Sistema.setStrNombre(rs.getString("strNombre"));
                
                aobjBE_Sistemas.add(objBE_Sistema);
            }
            
            if(aobjBE_Sistemas != null){
                objBE_SistemaResultado = aobjBE_Sistemas.get(0);
            }
            
   
        } catch (SQLException exception) {
            System.out.println("error: " + exception.getMessage());
            exception.printStackTrace();
        } finally {
            
            con.CerrarConexion();
 
            
        }
        
        return objBE_SistemaResultado;
      
}
}
